#include <tsin/library/BuiltinImages.hpp>

#include <tsin/library/TouhouSmallBulletSeries.hpp>
#include <tsin/library/TouhouBigBulletSeries.hpp>
#include <tsin/library/TouhouAnimatedBulletSeries.hpp>

#include <tsin/library/TouhouPlayerSeries.hpp>
#include <tsin/library/TouhouEnemySeries.hpp>

#include <tsin/library/TouhouEffectSeries.hpp>

using namespace tsin;

static TouhouSmallBulletSeries __touhouSmallBullets;
static TouhouBigBulletSeries __touhouBigBullets;
static TouhouAnimatedBulletSeries __touhouAnimatedBullets;

static TouhouPlayerSeries __touhouPlayerSeries;
static TouhouEnemySeries __touhouEnemySeries;

static TouhouEffectSeries __touhouEffectSeries;

bool BuiltinImages::inquiry(ImageSeriesId series, BulletShape shape,
                            BulletColor color, ImageInfo &info)
{
        switch (series) {
        case TOUHOU_SMALL_BULLET_SERIES:
                return __touhouSmallBullets.inquiry(shape, color, info);
        case TOUHOU_BIG_BULLET_SERIES:
                return __touhouBigBullets.inquiry(shape, color, info);
        case TOUHOU_ANIMATED_BULLET_SERIES:
                return __touhouAnimatedBullets.inquiry(shape, color, info);
        default:
                return false;
        }

}

bool BuiltinImages::inquiry(ImageSeriesId series, Character character, Action action,
                            ImageInfo &info)
{
        switch (series) {
        case TOUHOU_PLAYER:
                return __touhouPlayerSeries.inquiry(character, action, info);
        case TOUHOU_ENEMY:
                return __touhouEnemySeries.inquiry(character, action, info);
        default:
                return false;
        }
}

bool BuiltinImages::inquiry(ImageSeriesId series, Effect effect,
                            ImageInfo &info)
{
        switch (series) {
        case TOUHOU_EFFECT:
                return __touhouEffectSeries.inquiry(effect, info);
        default:
                return false;
        }
}
